/* eslint-disable operator-linebreak, indent */

export const getRequest = node => {
	if (!node || !node.data || !node.data.request) {
		return '--';
	}
	const { request } = node.data;
	if (typeof request === 'string' && node.data.request.length > 0) {
		return request;
	} else if (typeof request === 'object' && request.request && request.request.length > 0) {
		return request.request;
	}
	return '--';
};
export const getAnswer = node => {
	if (!node || !node.data || !node.data.answer) {
		return '--';
	}
	const { answer } = node.data;
	if (typeof answer === 'string' && answer.length > 0) {
		return answer;
	} else if (typeof answer === 'object' && (answer.answer || answer.listenindSpeech)) {
		return answer.answer || answer.listenindSpeech;
	}

	return '--';
};
export const getSummary = node => {
	if (!node || !node.data || !node.data.answer || node.data.answer?.length <= 0) {
		return '--';
	}
	const { answer, notifyExternal, params } = node.data;
	let result = '';
	// <模板名称 节点ID> 变量名<变量值> 推送地址：https://www.baidu.com
	answer.map((item, index) => {
		const { id, name } = item;
		const idx = id.split('_')[1];
		result += index === 0 ? `${name} ${idx}` : `、${name} ${idx}`;
		// if (type === 'messageCollect') {
		// 	result += `、${details.request}<${details.answer.answer}>`;
		// }
	});
	if (params) {
		for (const key in params) {
			result += `、${key}：&lt;${params[key] || ' -- '}&gt;`;
		}
	}
	if (notifyExternal && notifyExternal.url) {
		result += `、推送地址： ${notifyExternal.url}`;
	}

	return result;
};
export const getUrl = url => {
	if (url) {
		return url.replace('http://', 'https://');
	}
	return '--';
};
export const isYes = result => {
	return ['yes', 'ok'].includes(result);
};
export const getVariables = node => {
	if (!node || !node.data || !node.data.answer || node.data.answer.length <= 0) {
		return '--';
	}
	let result = '';
	const { answer } = node.data;

	if (answer?.data) {
		answer.data.map(item => {
			// console.log(item);
			// <变量名>:<变量结果>
			// item.value 填的字母在浏览器解析成标签了
			result += `、${item.name}：&lt;${item.value || ' -- '}&gt;`;
		});
		result = result.replace('、', '');
	}
	// console.warn(result);
	return result;
};
export const getInviteData = (node, key) => {
	if (!node || !node.data || !node.data.request || !node.data.request.data || !node.data.request.data.data) {
		return '--';
	}
	const { inviteMediaType, agentName, microphoneStatus } = node.data.request.data.data;
	// {"inviteMediaType": "video","agentName": null,"microphoneStatus": "unmute"}
	const ReceiveMediaType = { video: '视频', audio: '语音' };
	const MicrophoneStatus = { unmute: '开麦', mute: '静音' };
	if (key === 'inviteMediaType') {
		return ReceiveMediaType[inviteMediaType];
	}
	if (key === 'microphoneStatus') {
		return MicrophoneStatus[microphoneStatus];
	}
	return agentName || '--';
};

export const getType = node => {
	if (!node || !node.data || !node.data.request || !node.data.request.data) {
		return '';
	}
	return node.data.request.data.type;
};
export const getRequestType = node => {
	if (!node || !node.data || !node.data.request) {
		return '';
	}
	return node.data.request.type;
};
export const parseWorkFlow = node => {
	if (!node || !node.modId) {
		return;
	}

	if (node.modId.includes('messageSure')) {
		// <!-- 1. 信息确认 messageSure 模板结果 肯定/否定/其他/不回答|嗯啊模糊回答|没听清请重复 | AI播报话术内容 | 访客回答 -->
		node.request = getRequest(node);
		node.answer = getAnswer(node);
		node.isYes = isYes(node.result);
		node.result =
			node.result === 'abnormal'
				? '异常结束'
				: isYes(node.result)
				? '肯定'
				: node.result === 'no'
				? '否定'
				: node.result === 'other'
				? '其他'
				: node.result === 'fuzzy'
				? '嗯啊模糊回答'
				: node.result === 'repeat'
				? '没听清请重复'
				: '不回答';
	} else if (node.modId.includes('ivvr')) {
		// <!-- 2. 业务导航 ivvr 模板结果 命中意图分支/未命中意图分支 | 命中意图点 | 命中意图点内容 | AI播报话术内容 | 访客回答 -->
		node.answerKey = isYes(node.result) ? node.data.answer?.key : '--';
		node.answerName = isYes(node.result) ? node.data.answer?.name : '--';
		node.request = getRequest(node);
		node.answer = getAnswer(node);
		node.isYes = isYes(node.result);
		node.result = node.result === 'abnormal' ? '异常结束' : isYes(node.result) ? '命中意图分支' : '未命中意图分支';
	} else if (node.modId.includes('speakWait')) {
		// <!-- 3. 播报模板 speakWaiting 模板结果 成功 | AI播报话术内容 -->
		node.request = getRequest(node);
		node.isYes = isYes(node.result);
		node.result = node.result === 'abnormal' ? '异常结束' : isYes(node.result) ? '成功' : '';
	} else if (node.modId.includes('messageCollect')) {
		// <!-- 4. 信息记录 messageCollect 收集结果数据类型 “文本/字符串” / “数值” | 模板结果 有结果/没结果 | AI播报话术内容 | 访客回答 -->
		const typeOfCollectedResults = node.data.answer?.typeOfCollectedResults || node.data.typeOfCollectedResults;
		node.typeOfCollectedResults = typeOfCollectedResults === 'text' ? '文字串' : typeOfCollectedResults === 'numeric' ? '数值' : '数字串';
		node.request = getRequest(node);
		node.answer = getAnswer(node);
		node.isYes = isYes(node.result);
		node.result = node.result === 'abnormal' ? '异常结束' : isYes(node.result) ? '有结果' : '没结果';
	} else if (node.modId.includes('signContract')) {
		// <!-- 5. 合同签署 signContract 模板结果 成功 | 推送的文件名 | 推送文件的URL链接 -->
		node.requestName = node.data.request.data.name;
		node.requestUrl = node.data.request.data.url || '--';
		node.isYes = isYes(node.result);
		node.result = node.result === 'abnormal' ? '异常结束' : isYes(node.result) ? '成功' : '失败';
	} else if (node.modId.includes('detectLivingFace')) {
		// <!-- 6. 活体检测 detectLivingFace 模板结果 通过/不通过 | 识别图片的URL链接 -->
		node.answerUrl = node.data.answer?.url || '--';
		node.isYes = isYes(node.result);
		node.result = node.result === 'abnormal' ? '异常结束' : isYes(node.result) ? '通过' : '不通过';
	} else if (node.modId.includes('faceCompare')) {
		// <!-- 7. 人脸比对 faceCompare 模板结果 通过/不通过/检测不到人脸 | 识别图片的URL链接 | AI播报话术内容 -->
		node.answerUrl = node.data.answer?.url || '--';
		node.request = getRequest(node);
		node.isYes = isYes(node.result);
		node.result = node.result === 'abnormal' ? '异常结束' : isYes(node.result) ? '通过' : node.result === 'no' ? '不通过' : '检测不到人脸';
	} else if (node.modId.includes('sendMessage') && node.data.request.data.cmd === 'screen-snapshot') {
		// <!-- 8. 业务指令-截图 sendMessage 模板结果 成功 | 截图文件名 | 截图文件的URL链接 -->
		node.answerName = node.data.answer?.name;
		node.answerUrl = node.data.answer?.url || '--';
		node.isYes = isYes(node.result);
		node.result = node.result === 'abnormal' ? '异常结束' : isYes(node.result) ? '成功' : '';
	} else if (node.modId.includes('sendSign')) {
		// <!-- 9. 业务指令-推送签名 sendMessage 模板结果 成功 | 签名文件名 | 签名文件的URL链接 -->
		node.answerName = node.data.answer?.name || '--';
		node.answerUrl = node.data.answer?.url || '--';
		node.isYes = isYes(node.result);
		node.result = node.result === 'abnormal' ? '异常结束' : isYes(node.result) ? '成功' : node.result === 'other' ? '超时未提交' : '提交失败';
	} else if (node.modId.includes('sendContents') && getRequestType(node) === 'link' && getType(node) === 'video') {
		// <!-- 10 内容推送-推送视频 sendContents | sendVideoNode 模板结果 成功 | 上传视频名 | 上传视频的URL链接 -->
		node.requestName = node.data.request.data.name || '--';
		node.requestUrl = node.data.request.data.url || '--';
		node.isYes = isYes(node.result);
		node.result = node.result === 'abnormal' ? '异常结束' : isYes(node.result) ? '成功' : '失败';
	} else if (node.modId.includes('sendContents') && getRequestType(node) === 'link' && getType(node) === 'page') {
		// <!-- 11. 内容推送-推送网页 sendContents | sendLinkNode 模板结果 成功 | 推送网页地址 -->
		node.requestUrl = node.data.request.data.url || '--';
		node.isYes = isYes(node.result);
		node.result = node.result === 'abnormal' ? '异常结束' : isYes(node.result) ? '成功' : '失败';
	} else if (node.modId.includes('sendContents') && getRequestType(node) === 'richtext') {
		// <!-- 12. 内容推送-推送富文本 sendContents | sendRichTextNode 模板结果 | 推送富文本内容 -->
		node.request = node.data.request?.data?.content ? '查看' : '--';
		node.isYes = isYes(node.result);
		node.result = node.result === 'abnormal' ? '异常结束' : isYes(node.result) ? '成功' : '失败';
	} else if (node.modId.includes('sendContents') && getRequestType(node) === 'link' && getType(node) === 'paper') {
		// <!-- 12. 内容推送-PDF sendContents |  模板结果 | 推送PDF： -->
		node.requestName = node.data.request.data.name || '--';
		node.requestUrl = node.data.request.data.url || '--';
		node.isYes = isYes(node.result);
		node.result = node.result === 'abnormal' ? '异常结束' : isYes(node.result) ? '成功' : '失败';
	} else if (node.modId.includes('requestLocation')) {
		// <!-- 13. 获取位置 requestLocation 模板结果 获取成功/获取失败/获取超时 | AI播报话术内容 | 地理位置信息 -->
		node.request = node.data.request;
		node.answerAddress = node.data.answer || '--';
		node.isYes = isYes(node.result);
		node.result = node.result === 'abnormal' ? '异常结束' : isYes(node.result) ? '获取成功' : node.result === 'no' ? '获取失败' : '获取超时';
	} else if (node.modId.includes('scanCode')) {
		// <!-- 14. 推送扫描 scanCode 模板结果 扫码成功/扫码失败/扫码超时 | AI播报话术内容 | 扫描内容 -->
		node.request = node.data.request;
		node.answerCode = node.data.answer?.data?.code || '--';
		node.isYes = isYes(node.result);
		node.result = node.result === 'abnormal' ? '异常结束' : isYes(node.result) ? '扫码成功' : node.result === 'no' ? '扫码失败' : '扫码超时';
	} else if (node.modId.includes('sendForm')) {
		// <!-- 15. 表单填写 sendForm 模板结果 提交成功/提交失败/超时未提交 | AI播报话术内容 | 表单内容 -->
		node.request = getRequest(node);
		node.answer = isYes(node.result) && node.data.answer?.length > 0 ? node.data.answer.map((item, index) => `查看 ${index + 1}`) : '--';
		node.isYes = isYes(node.result);
		node.result = node.result === 'abnormal' ? '异常结束' : isYes(node.result) ? '提交成功' : node.result === 'no' ? '提交失败' : '超时未提交';
	} else if (node.modId.includes('idCardCompare')) {
		// <!-- 16. 人证对比 idCardCompare 模板结果 通过/不通过 | 识别图片的URL链接 | AI播报话术内容 -->
		node.answerUrl = node.data.answer?.url || '--';
		node.request = getRequest(node);
		node.isYes = isYes(node.result);
		node.result = node.result === 'abnormal' ? '异常结束' : isYes(node.result) ? '通过' : node.result === 'no' ? '不通过' : '检测不到人脸';
	} else if (node.modId.includes('silentWating')) {
		// <!-- 17. 静默等待 silentWating 模板结果 成功-->
		node.result = '成功';
	} else if (node.modId.includes('optionJudge')) {
		// <!-- 18. 选项判断 optionJudge 模板结果 命中选项/未命中选项 | 命中选项内容 -->
		node.answer = getAnswer(node);
		node.isYes = isYes(node.result);
		node.result = node.result === 'abnormal' ? '异常结束' : isYes(node.result) ? '命中选项' : '未命中选项';
	} else if (node.modId.includes('soundReception')) {
		// <!-- 19. 收音模板 soundReception 收集结果数据类型 “文本/字符串” / “数值” | 模板结果 | 访客回答 -->
		const typeOfCollectedResults = node.data.answer?.typeOfCollectedResults || node.data.typeOfCollectedResults;
		node.typeOfCollectedResults = typeOfCollectedResults === 'numeric' ? '数值' : typeOfCollectedResults === 'text' ? '文字串' : '数字串';
		node.answer = getAnswer(node);
		node.isYes = isYes(node.result);
		node.result = node.result === 'abnormal' ? '异常结束' : isYes(node.result) ? '有结果' : '无结果';
	} else if (node.modId.includes('third-nlp') || node.modId.includes('nlp')) {
		// <!-- 20. NLP对接 nlp 模板结果 命中NLP标识/未命中NLP标识 | NLP标识 | 访客回答 -->
		node.answerKey = node.data.answer?.key || '--';
		node.answerListenindSpeech = node.data.answer?.listenindSpeech || '--';
		node.isYes = isYes(node.result);
		node.result = node.result === 'abnormal' ? '异常结束' : isYes(node.result) ? '命中NLP标识' : '未命中NLP标识';
	} else if (node.modId.includes('variableJudge')) {
		// <!-- 21. 变量判断 variableJudge 模板结果 命中判断分支/未命中判断分支 | 命中分支详情 -->
		node.answer = getAnswer(node);
		node.isYes = isYes(node.result);
		node.result = node.result === 'abnormal' ? '异常结束' : isYes(node.result) ? '命中判断分支' : '未命中判断分支';
	} else if (node.modId.includes('messageSummary')) {
		// <!-- 25. 信息汇总 messageSummary 发起信息汇总：汇总流程内最终经历分支并选择的模块的<模板名称 节点ID> 变量名<变量值> -->
		node.summary = getSummary(node);
	} else if (node.modId.includes('sendDeposition')) {
		// <!-- 26. 证言抄录 sendDeposition 模板结果  提交成功/提交失败/超时未提交 | 抄录证言 | 抄录结果URL链接 -->
		node.answerText = isYes(node.result) && node.data.answer?.text ? node.data.answer?.text : '--';
		node.answerUrl = isYes(node.result) && node.data.answer?.data ? node.data.answer?.data : '--';
		node.isYes = isYes(node.result);
		node.result = node.result === 'abnormal' ? '异常结束' : isYes(node.result) ? '提交成功' : node.result === 'no' ? '提交失败' : '超时未提交';
	} else if (node.modId.includes('variableCollection')) {
		// <!-- 27. 收集变量 collect-variable 模板结果  提交成功/提交失败/超时未提交 | 收集变量 <变量名>:<变量结果> <变量名>：- -->
		node.request = getRequest(node);
		node.variables = getVariables(node);
		node.isYes = isYes(node.result);
		node.result = node.result === 'abnormal' ? '异常结束' : isYes(node.result) ? '提交成功' : node.result === 'no' ? '提交失败' : '超时未提交';
	} else if (node.modId.includes('collectShortVideo')) {
		// <!-- 短视频采集 collectShortVideo 模版结果 提交成功/提交失败/超时未提交 AI播报话术内容 短视频URL链接-->
		node.request = getRequest(node);
		node.answerUrl = isYes(node.result) && node.data.answer?.url ? node.data.answer?.url : '--';
		node.isYes = isYes(node.result);
		node.result = node.result === 'abnormal' ? '异常结束' : isYes(node.result) ? '提交成功' : node.result === 'no' ? '提交失败' : '超时未提交';
	} else if (node.modId.includes('inviteHumanThreeParties')) {
		// <!-- 邀请人工三方 inviteHumanThreeParties 邀请工号 被邀请人加入会话后的通话模式 被邀请人加入会话后麦克风状态 模版结果 邀请成功/邀请超时/邀请被拒/邀请发送失败-->
		node.requestAgentName = getInviteData(node, 'agentName');
		node.requestReceiveMediaType = getInviteData(node, 'inviteMediaType');
		node.requestMicrophoneStatus = getInviteData(node, 'microphoneStatus');
		node.isYes = isYes(node.result);
		node.result = node.result === 'abnormal' ? '异常结束' : isYes(node.result) ? '邀请成功' : node.result === 'timeout' ? '邀请超时' : node.result === 'reject' ? '邀请被拒' : '邀请发送失败';
	} else if (node.modId.includes('sceneTransfer')) {
		// <!-- 24. sceneTransfer: '场景转接' -->
		node.answerName = node.data.answer?.bizSceneName || '--';
		node.isYes = isYes(node.result);
		node.result = node.result === 'abnormal' ? '异常结束' : isYes(node.result) ? '成功' : '失败';
	} else if (node.modId.includes('transfer')) {
		// <!-- 23. transfer: '转人工模板' -->
		node.isYes = isYes(node.result);
		node.result = node.result === 'abnormal' ? '异常结束' : isYes(node.result) ? '成功' : '失败';
	} else if (node.modId.includes('interfaceCall')) {
		// <!-- 25. interfaceCall: '接口调用模板' -->
		node.isYes = isYes(node.result);
		node.result = node.result === 'abnormal' ? '异常结束' : isYes(node.result) ? '调用成功' : '调用失败';
	}

	// <!-- 22. hangup: '结束模版' -->
};
